class StatsController < ApplicationController

  before_filter :login_required
  
  # estadisticas de marketing
  def mkt
    store_location
    @start_year, @year = get_date
    anu_mkt

    tot_prospects = Persona.count_prospects
    @nro_prospects_hombres = Persona.count_prospects(:conditions=>"genero LIKE 'h'")
    @per_prospects_hombres = (@nro_prospects_hombres * 100.0) / tot_prospects
    @nro_prospects_mujeres = Persona.count_prospects(:conditions=>"genero LIKE 'm'")
    @per_prospects_mujeres = (@nro_prospects_mujeres * 100.0) / tot_prospects

    # TODO cantidad de visitas por comosupo del mes corriente.
    # TODO que los numeritos sean links a los detalles pertinentes de ese mes 
  end
  
  def anu_mkt
    @visitas_x_mes    = Array::new(12){|mes| Visita.count(:conditions=>"MONTH(fecha)=#{mes+1} and YEAR(fecha)=#{@year}")}
    @visitasP_x_mes   = Array::new(12){|mes| Visita.count(:conditions=>"coeficiente_id>#{Coeficiente::FP} AND coeficiente_id<#{Coeficiente::ALUMNO} AND MONTH(fecha)=#{mes+1} AND YEAR(fecha)=#{@year}")}
    @visitasEx_x_mes  = Array::new(12){|mes| Visita.count(:conditions=>"coeficiente_id=#{Coeficiente::EXALUMNO} AND MONTH(fecha)=#{mes+1} AND YEAR(fecha)=#{@year}")}
    @visitasFP_x_mes  = Array::new(12){|mes| Visita.count(:conditions=>"coeficiente_id=#{Coeficiente::FP} AND MONTH(fecha)=#{mes+1} AND YEAR(fecha)=#{@year}")}
    @matrs_x_mes=Array::new(12){|mes| Matricula.count(:conditions=>"MONTH(fecha)=#{mes+1} and YEAR(fecha)=#{@year}")}
    @efectividad_x_mes = Array::new(12){|mes| ((@matrs_x_mes[mes].to_f)/(@visitasP_x_mes[mes].to_f+@visitasEx_x_mes[mes].to_f))*100.0}
    @alumnos_x_mes=Array::new(12){|mes| Persona.nro_alumnos_al(Date.parse("#{mes+1}/1/#{Date.today.year}").end_of_month)}
    @ranking_comosupos=Array::new(12){|mes| Visita.find(:all,:select=>"comosupo_id,count(*) as cant",:conditions=>"MONTH(fecha)=#{mes+1} and YEAR(fecha)=#{@year}",:group=>"comosupo_id", :order=>"cant DESC")}    
  end

  def anu_mkt_refresh
    @start_year, @year = get_date
    anu_mkt
    render :partial=>'mkt_anual'
  end

  # estadisticas de pedagogico
  def pdg
    store_location
    @start_year, @year = get_date
    
    tot_alus = Persona.nro_alumnos
    @nro_alumnos_hombres = Persona.count_alumnos(:conditions=>"genero LIKE 'h'")
    @per_alumnos_hombres = (@nro_alumnos_hombres * 100.0) / tot_alus
    @nro_alumnos_mujeres = Persona.count_alumnos(:conditions=>"genero LIKE 'm'")
    @per_alumnos_mujeres = (@nro_alumnos_mujeres * 100.0) / tot_alus

    @per_alumnos_preyoga = Persona.nro_alumnos_preyoga * 100.0 / tot_alus
    @per_alumnos_yoga    = Persona.nro_alumnos_yoga * 100.0 / tot_alus
    
    @evasiones = Array::new(12){|i| Evasion.count(:conditions=>"MONTH(fecha)=#{i+1} and #{@year}=YEAR(CURDATE())")}
  end
  
  # financiero
  def fin
    
  end
  
  # staff
  def stf
    
  end
  

  private
  #retorna start_year segun la primer visita registrada y year con params[date]['year(1i)'] o con el anio actual.
  def get_date
    # El dropdown permite elegir desde el anio de la primer visita. 
    primer_visita = Visita.find(:first,:order=>'fecha ASC')
    if primer_visita then
      start_year = primer_visita.fecha.year
    else
      start_year = Date.today.year
    end
    
    # si llega una fecha por parametro utilizarla, sino trabajar sobre la fecha actual.
    if params[:date] and params[:date]['year(1i)'] then
      year = params[:date]['year(1i)']
    else
      year = Date.today.year
    end
    
    return start_year, year
  end
  
  
end
